home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
asmutil
/
disasm.zip
/
DOSKEYS.BAS
< prev
next >
Wrap
BASIC Source File
|
1988-06-03
|
17KB
|
308 lines
10 '┌─────────────────────────────────────────────────────────────────────────┐
20 '│ * DOS FUNCTION KEY EDITOR * (for DOS 2.0 and the ANSI.SYS driver only). │
30 '├─────────────────────────────────────────────────────────────────────────┤
50 '│ This program may be copied--free of charge--for any non-commercial use. │
60 '│ For futher info., contact: Vince Bly, PO Box 409, Ft. Belvoir, VA 22060 │
70 '└─────────────────────────────────────────────────────────────────────────┘
80 '
90 RUN 8000
100 '───── Read to EOL subroutine ─────
500 T="": I=0: WHILE RIGHT$(T,2)<>" " AND I<L
510 T=T+CHR$(SCREEN(ROW,COL+I)): I=I+1: WEND
530 I=I-2: T=LEFT$(T,I): RETURN
540 '
999 '─────── SCREEN EDITOR ────────────────────────────────────────────────────
1000 DEFINT A-R: DEFSTR S-W: S="": I=0: COL=9: ROW=13
1010 BELL$="MB MS L64 O5 T255 C"
1090 LOCATE ROW,COL,1,6,7: GOSUB 9000' Go set FN definitions
1095 '
1400 IF SCREEN (ROW,COL,1)=120 THEN ROW=13
1410 LOCATE ROW,COL,1
1500 S=INKEY$: IF S="" THEN 1500
1510 IF S=>" " THEN 1700' standard char.
1515 IF LEN(S)>1 THEN 1900' extended char.
1520 IF S=CHR$(8) THEN 1800' backspace
1522 IF S=CHR$(9) THEN 2200' right tab
1524 IF S=CHR$(13) THEN 2000' return
1527 IF S=CHR$(10) THEN PRINT CHR$(27);: GOTO 2000' ctrl. return
1530 IF S=CHR$(19) THEN S=CHR$(126): GOTO 1700' trailing space
1531 IF S=CHR$(27) THEN 2300' escape
1535 IF S<>CHR$(17) THEN 1500 ELSE LOCATE ,,0,6,7: RUN 3000'exit to read screen
1590 '
1700 PRINT S;: IF FNRB(COL) THEN COL=COL+1: GOTO 1500' [std. char.]
1710 PLAY BELL$: COL=FNHM((COL+27)MOD 80): GOTO 1400
1800 IF NOT FNLB(COL) THEN 1400 ELSE COL=COL-1' [back-space]
1810 LOCATE ,COL: GOTO 1970
1900 I= ASC(RIGHT$(S,1))-71: IF I<0 THEN 2100
1905 ON I GOTO 1940,1910,1910,1930,1910,1920,1910,1980,1950,1910,1960,1970
1910 IF I=0 THEN ROW=7: COL=FNHM(COL): GOTO 1400' [home]
1915 IF I=46 THEN PRINT SPC(15-COL+FNHM(COL)): GOTO 1400 ELSE 1500'[ctl]-[end]
1920 IF FNRB(COL) THEN COL=COL+1: GOTO 1400' [right]
1925 IF COL<60 THEN COL=COL+12: GOTO 1400 ELSE COL=9: GOTO 1400
1930 IF FNLB(COL) THEN COL=COL-1: GOTO 1400' [left]
1935 IF COL>15 THEN COL=COL-12: GOTO 1400 ELSE COL=78: GOTO 1400
1940 IF ROW>7 THEN ROW=ROW-1: GOTO 1400 ELSE ROW=16: GOTO 1400' [up]
1950 IF ROW<16 THEN ROW=ROW+1: GOTO 1400 ELSE ROW=7: GOTO 1400' [down]
1960 LOCATE ,,0: L=18-COL+FNHM(COL): GOSUB 500: GOTO 2500' [insert]
1970 LOCATE ,,0: COL=COL+1: L=18-COL+FNHM(COL): GOSUB 500' [delete]
1975 COL=COL-1: PRINT T" ": GOTO 1400
1980 LOCATE ,,0: L=18-COL+FNHM(COL): GOSUB 500' [end]
1985 IF I=L-2 THEN 1400 ELSE COL=COL+I: GOTO 1400
2000 COL=FNHM(COL): GOTO 1950' [enter]
2100 IF (I<>-56) OR NOT FNLB(COL) THEN 1500' [tab left]
2110 COL=FNHM(COL): GOTO 1400
2200 COL=FNHM((COL+27)MOD 80): GOTO 1400' [tab right]
2300 COL=FNHM(COL): LOCATE ,COL,0: PRINT SPC(16);: GOTO 1400' [escape]
2310 '
2499 '────── Insert Mode ─────────────
2500 L=L-3: IF I<L THEN T=T+STRING$(L-I,32)
2510 LOCATE ,COL,1,0,6
2520 S=INKEY$: IF S="" THEN 2520
2530 IF S<" " THEN 2580 ELSE IF NOT FNRB(COL) THEN 2520
2540 LOCATE,,0: PRINT S;LEFT$(T,L);: L=L-1: COL=COL+1: GOTO 2510
2580 IF S=CHR$(8) THEN IF FNLB(COL) THEN L=L+1: COL=COL-1: LOCATE ,COL,0: PRINT LEFT$(T,L+1);: GOTO 2510 ELSE 2510
2590 LOCATE ,,,6,7: IF S=CHR$(0)+"R" THEN 1400 ELSE 1524
2595 '
2999 '────── READ SCREEN ROUTINE ──────────────────────────────────────────────
3000 DEFINT A-R: DEFSTR S-W: T="": I=0: DIM S(23)
3020 LOCATE 18,1: COLOR 16,7:PRINT " COMPILING ";
3025 COLOR 15,0: PRINT SPC(60): COLOR 0,15: B=0: C=0: L=18
3029 FOR COL=9 TO 63 STEP 27
3030 FOR ROW=7+(6 AND (COL=9)) TO 16
3040 LOCATE ROW,COL: GOSUB 500
3043 IF RIGHT$(T,1)=CHR$(126) THEN MID$(T,I,1)=" "
3048 B=B+I+(3 AND (I>0)): IF B>192 THEN 3095
3050 S(C)=T: PRINT T: LOCATE 18,12: PRINT B
3060 C=C+1: NEXT
3065 NEXT
3070 LOCATE 18,1,1: COLOR 15,0: PRINT SPC(79);: GOTO 5000
3090 '
3095 LOCATE 18,1: PRINT " COMPILED ";: LOCATE ,16: COLOR 16,7: PRINT " ««";
3097 COLOR 0,15: LOCATE ,19: PRINT " ANSI Buffer Full ": COLOR 15,0: GOTO 5000
3109 '
3110 '────── SAVE FILE TO DISK ROUTINE ────────────────────────────────────────
3111 LOCATE 19,1:PRINT: LOCATE 21,46: COLOR 31,0: PRINT "[1]": COLOR 15,0: GOSUB 9100: LOCATE 19,2: COLOR 15,0
3112 LINE INPUT "Please enter filename (.KEY will be used as the extension): ";N$
3113 GOSUB 9200: IF INSTR(N$,"+") THEN LOCATE 22,2: PRINT "Saving aborted";: GOTO 5035
3114 IF INSTR(N$,"^") THEN 7510 ELSE IF N$="" THEN 5035
3115 I=INSTR(N$,"."): IF I THEN N$=LEFT$(N$,I)+"KEY" ELSE N$=N$+".KEY"
3118 OPEN "O",#1,N$: LOCATE 18,1: COLOR 16,7: PRINT " ** SAVING ** ";
3120 PRINT #1, "INSTALLING "N$
3125 FOR I=0 TO 23
3130 T=S(I): L=LEN(T): C$="p"
3140 IF L=0 THEN 3180
3150 IF RIGHT$(T,1)=CHR$(27) THEN T=LEFT$(T,L-1): C$=";13p"
3153 IF T="^C" THEN T=" ": C$=";3p"
3155 PRINT #1,CHR$(27)"[0;";
3160 J=65+I+(15 AND (I>3)): IF J<100 THEN F$="##" ELSE F$="###"
3165 PRINT #1,USING F$;J;
3170 PRINT #1,";"CHR$(34)T;CHR$(34)C$
3180 NEXT
3280 PRINT #1, "DONE"
3290 CLOSE: LOCATE 18,1: COLOR 0,15: PRINT " ** SAVED "N$" ** "
3300 COLOR 15,0: GOTO 5000
3399 '
3400 '─────────── UNCOMPILE ROUTINE ───────────────────────────────────────────
3410 LOCATE 18,1: COLOR 15,0: PRINT SPC(50)CHR$(13)
3420 T=CHR$(29)+CHR$(126): PRINT SPC(60)
3425 COLOR 15,0: LOCATE ,,0: C=-6
3430 FOR COL=9 TO 63 STEP 27
3440 FOR ROW=7 TO 16
3445 IF COL=9 AND ROW<13 THEN 3490' skip DOS keys
3450 LOCATE ROW,COL: PRINT S(C);
3460 IF RIGHT$(S(C),1)=" " THEN PRINT T;
3470 I=LEN(S(C)): IF I THEN PRINT SPC(16-I);
3490 C=C+1: NEXT:NEXT
3500 GOSUB 6520: RUN 1000
3510 '
5000 '──────REQUEST USER OPTION ───────────────────────────────────────────────
5005 COLOR 15: LOCATE 19,1: PRINT SPC(79);SPC(79);: LOCATE 21,1,0
5010 PRINT SPC(45)"[1]... Save this key file to disk."
5020 PRINT SPC(45)"[2]... Load a key file from disk."
5022 PRINT SPC(45)"[3]... Print a hardcopy of keyset."
5025 PRINT SPC(45)"[4]... Go to the edit mode.";: LOCATE 25,1
5030 PRINT SPC(45)"[5]... Quit this program.";
5035 LOCATE 19,1: PRINT SPC(79);: LOCATE 19,2,1
5040 LINE INPUT"Please choose an option from the list below [1-5]: ",N$
5045 LOCATE 22,1: PRINT SPC(40);
5050 I=VAL(N$): IF (I<1) OR (I>5) THEN 5035
5060 IF I=5 THEN 9300 ELSE IF I=4 THEN 3410
5070 IF I=3 THEN 8500 ELSE IF I=2 THEN 7010 ELSE 3110
5080 '
5999 '──────────────── PRINT EDIT SCREEN ──────────────────────────────────────
6000 DEFINT A-R: DEFSTR S-W: I=0: DIM S(23)
6010 'SCREEN 0,0,0: WIDTH 80: COLOR 15,0,8
6020 CLS: LOCATE 1,,0
6030 '
6035 MDL$="│ F## = ": L$=STRING$(2,9)
6037 MDL$=MDL$+L$+" │ "+MDL$+L$+" │ "+MDL$+L$+" │"
6040 L$=STRING$(24,196)
6050 TOP$="├"+L$+"┤"
6070 BOT$="└"+L$+"┘"
6080 '
6090 LOCATE ,15: PRINT "╔═════════════════════════════════════════════════╗"
6110 LOCATE ,15: PRINT "║ *** DOS FUNCTION KEY EDITOR - V. Bly - 4/83 *** ║"
6115 LOCATE ,15: PRINT "╚═════════════════════════════════════════════════╝"
6130 LOCATE ,2: PRINT "┌───── Standard Keys ────┐ ┌───── Shifted Keys ─────┐ ┌───── Control Keys ─────┐";
6140 PRINT TOP$" "TOP$" "TOP$;
6150 FOR I=1 TO 10
6160 LOCATE 6+I: PRINT USING MDL$;I;I;I
6180 NEXT
6190 LOCATE 17,1: PRINT BOT$" "BOT$" "BOT$: COLOR 8,7
6191 LOCATE 7,8: PRINT " copy one char ";
6192 LOCATE 8,8: PRINT " copy to char ";
6193 LOCATE 9,8: PRINT " copy from char ";
6195 LOCATE 10,8: PRINT " skip to char "
6196 LOCATE 11,8: PRINT " accept template "
6197 LOCATE 12,8: PRINT " control-Z "
6300 COLOR 15,0: GOTO 5000: GOSUB 6520: RUN 1000
6310 '
6520 COLOR 15,0: LOCATE 18,1' ───── Print bottom of edit screen ─────
6530 PRINT " DO NOT PRESS <Ctrl>[Break], ";: COLO